package faktorI;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Calendar;
import java.util.LinkedList;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileNameExtensionFilter;

public class Izvestaj {
	public static void napraviIzvestaj(){	      
	    JFileChooser c = new JFileChooser();
	    c.removeChoosableFileFilter(c.getChoosableFileFilters()[0]);
	    c.setFileFilter(new FileNameExtensionFilter("Izvestaj simulacije faktoraI (*.rtf)", "rtf"));
	    String fajlS;
		int res = c.showSaveDialog(FaktorIRadnaPovrs.instanca());
		if (res == JFileChooser.APPROVE_OPTION) {
			fajlS = c.getSelectedFile().getAbsolutePath();
			if (!fajlS.endsWith(".rtf"))fajlS = fajlS + ".rtf";
			File file = new File(fajlS);
			StringBuffer sb = new StringBuffer(); 
			BufferedWriter output = null;
			try{
				output =new BufferedWriter(new FileWriter(file));
				dodajZaglavlje(sb);
				sb.append("Data su pravila jednog ekspertskog sistema.\n");
				sb.append(LstPrav.instanca().toString());
				sb.append("Poznata su, takodje, opazanja i odgovarajuci faktori izvesnosti:\n");
				sb.append(LstOpaz.instanca().toString());
				sb.append("\nPotrebno je odrediti faktor izvesnosti zakljucaka:\n\n");
				sb.append(LstZaklj.instanca().selZaklj().toString());
				sb.append("\n");
				sb.append("================================ RESENJE ================================\n\n");
				dodajResenje(sb);
				dodajZakljucak(sb);
				output.write(sb.toString());
				output.close();
				try{
					Process p = Runtime.getRuntime().exec("write.exe" + " " + "\"" + fajlS + "\"");
				}catch (Exception e){prikaziObavestenje(fajlS);}
			} catch (FileNotFoundException e) {
				new GreskaD(FaktorIRadnaPovrs.instanca(), "Greska: nema fajla " + fajlS);
			} catch (IOException e) {
				new GreskaD(FaktorIRadnaPovrs.instanca(), "Greska pri upisu podataka u fajl: " + fajlS);
			}finally {
				try {
					if (output != null)output.close();
				} catch (IOException e) {
					new GreskaD(FaktorIRadnaPovrs.instanca(), "Greska pri zatvaranju fajla: " + fajlS);
				}
			}
		}// end of if
	} 

	private static void dodajZaglavlje(StringBuffer sb){
		sb.append("*************************************************************************\n" +
				  "************    SIMULACIJA FAKTORA IZVESNOSTI ---- IZVESTAJ    **********\n" +
				  "*************************************************************************\n" +
				  "\n" +
				  "================================= POSTAVKA ==============================\n");
	}			
	
	public static void dodajZakljucak(StringBuffer sb){
		sb.append("*************************************************************************\n");
		sb.append("*************************************************************************\n");
		sb.append(Calendar.getInstance().getTime() + "\n");
		sb.append("*************************************************************************\n");
		sb.append("*************************************************************************\n");
	}
	
	private static void dodajResenje(StringBuffer sb){
		FaktorISimulacija simul = (FaktorISimulacija) FaktorIRadnaPovrs.instanca().dohvatiSimulaciju();
		LinkedList<FaktorIStanje> stanje = simul.getStanja(); 
		for(int i=0; i<stanje.size();i++){
			sb.append("\n==========================================\n\n");
			sb.append(stanje.get(i).dohvatiObjasnjenja());
		}
		sb.append("\n\n");
	}
	
	private static void prikaziObavestenje(String file) {
		JOptionPane.showMessageDialog(FaktorIRadnaPovrs.instanca(),
				"Uspesno ste sacuvali izvestaj!",
				"Obavestenje", JOptionPane.INFORMATION_MESSAGE);
	}
}
